
// daemon 守护进程 
// 信号屏蔽 SIGPIPE SIGCHLD
// fork创建子进程 孤儿进程
// 自己分组
// 输入输出重定向 /etc/null
#pragma once

#include <signal.h>
#include <unistd.h>
#include <cerrno>
#include <cstring>
#include <cstdlib>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include "Log.hpp"

// 守护进程
void Daemon()
{
    signal(SIGPIPE, SIG_IGN);
    signal(SIGCHLD, SIG_IGN);

    if(fork() > 0) exit(0);

    setsid();

    int nullfile = open("/dev/null", O_RDONLY | O_WRONLY);
    if(nullfile < 0)
    {
        Messagelog(FATAL, "open nullfile error %d-%s", errno, strerror(errno));
        exit(8);
    }
    dup2(nullfile, 0);
    dup2(nullfile, 1);
    dup2(nullfile, 2);
    close(nullfile);
}
